class LogIn {
    public String userName = "admin";
    public String passWold = "123456";
    public void logIn(String userName,String passWold) {
        if(!this.userName.equals(userName)) {
            throw new UserNameException("用户名错误!");
        }

        if(! this.passWold.equals(passWold)) {
            throw new PassWoldException("密码错误!");
        }

        System.out.println("登录成功!");
    }
}
public class Test {
    public static void main(String[] args) {
        //自定义异常
        LogIn logIn = new LogIn();
        logIn.logIn("admin","123");
    }
    public static void main5(String[] args) {
        //异常的处理流程
        //1.首先执行try语句
        //2.如果try语句发生异常,直接终止try语句,看和catch那个捕捉符合
        //3.符合使用catch进行捕捉,执行相应代码
        //4.没有则返回到上层调用者
        //5.finally语句一定会被执行
        //6.继续向上层调用者进行处理
        //7..如果上层调用者为main且没有进行处理,则JVM自动进行处理终止程序
    }
    public static void main4(String[] args) {
        //finally:无论是否被捕获,该关键字中的代码都要被执行.
        //一般最后执行,且一定执行.
        //一般用于资源关闭,扫尾工作
        try {
            int[] array = {1,2,3,4,5};
            System.out.println(array[0]);
        }catch (Exception e) {//直接使用exception 捕获
            System.out.println("空指针异常!");
        } finally {
            System.out.println("finally被执行!");
        }
        System.out.println("after");
    }
    public static void main3(String[] args) {
        //try注意事项
        //1.try语句块内的语句,在异常代码之后的代码不执行
        //2.如果try中发生的异常,无法捕获时,将会由jvm进行处理,处理结果就是,程序直接崩溃
        //3.如果异常具有父子类关系,父类必须放在最后面,否则会直接报错
        //4.可以一次捕获多个异常,不推荐!
    }
    public static void main2(String[] args) {
        //捕获异常的多种方式
        //方法一
//        try {
//            int[] array = {1,2,3,4,5};
//            System.out.println(array[5]);
//            System.out.println("1221");//前面代码发生异常,还未进行捕获异常,所以该语句不会执行.
//        }catch (NullPointerException e) {
//            e.printStackTrace();
//            System.out.println("空指针异常!");
//        }catch (ArrayIndexOutOfBoundsException e) {
//            e.printStackTrace();
//            System.out.println("数组越界异常!");
//        }
//        System.out.println("after");
        //方法二
//        try {
//            int[] array = {1,2,3,4,5};
//            System.out.println(array[5]);
//            System.out.println("1221");//前面代码发生异常,还未进行捕获异常,所以该语句不会执行.
//        }catch (NullPointerException|ArrayIndexOutOfBoundsException e) {//使用|分隔开
//            e.printStackTrace();
//            System.out.println("空指针|数组越界异常!");
//        }
//        System.out.println("after");
        //方法三
        try {
            int[] array = {1,2,3,4,5};
            System.out.println(array[5]);
            System.out.println("1221");//前面代码发生异常,还未进行捕获异常,所以该语句不会执行.
        }catch (Exception e) {//直接使用exception 捕获
            e.printStackTrace();
            System.out.println("空指针|数组越界异常!");
        }
        System.out.println("after");
    }
    public static void func() {
        int[] array = null;
        System.out.println(array.length);
    }
    public static void main1(String[] args) {
        //try { 可能出现异常的语句},catch (异常 e){对于异常的处理方法}
        try {
            func();
        }catch (NullPointerException e) {
            e.printStackTrace();
            System.out.println("空指针异常");
        }
        System.out.println("after");
    }
}
